package com.situ.controller;

import com.situ.bean.User;
import com.situ.service.IUserService;
import com.situ.util.LayData;
import com.situ.util.SYS;
import com.sun.javafx.collections.MappingChange;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class UserloginContoller {

    @Autowired
    IUserService userService;

    @RequestMapping("login")
    public String login(@RequestParam String username,@RequestParam String password, HttpSession session, Model model) {
        // 检查用户是否已经登录
        User user = new User();
        user.setUsername(username);
        if (session.getAttribute(SYS.UPLOAD_USER) != null) {
            // 用户已登录，直接重定向到user.html

            return "user.html";
        }

        // 如果用户未登录，尝试登录

        if (userService.getUserByName(user) != null&& userService.getUserByName(user).getPassword().equals(password)) {
            System.out.println("登录成功");
            setsession(userService.getUserByName(user), session); // 假设这个方法是用来设置session的

            // 登录成功后重定向到index.html或user.html
            return "redirect:index.html";
        } else {
            // 登录失败，返回登录页面
            return "login.html";
        }
    }


    public void setsession(User user, HttpSession session) {

        if (user != null) {
            session.setAttribute(SYS.UPLOAD_USER, user);

        }else{
            System.out.println("session为空");
        }

    }


    //注册页面

    @PostMapping("signup")
    public ResponseEntity<LayData> signup(@RequestBody User user) {
        System.out.println("注册页面");
        System.out.println(user);

        LayData response = new LayData();
        try {
            if (userService.addUser(user)) {
                userService.updateUser(user);
                // 如果添加用户成功，设置响应信息
                response.setCode(0); // 通常 0 表示成功
                response.setMsg("注册成功");
                // 如果您需要在 data 字段中返回用户信息，可以在这里设置
                List data = new ArrayList<>();
                data.add(user); // 假设 user 对象可以被转换为 JSON
                response.setData(data);
                response.setCount(data.size());

            } else {
                // 如果添加用户失败，设置错误信息
                response.setCode(1); // 非 0 的 code 值通常表示错误
                response.setMsg("注册失败");
            }
        } catch (Exception e) {
            // 处理异常情况
            response.setCode(1);
            response.setMsg("注册过程中发生错误：" + e.getMessage());
        }

        // 返回 ResponseEntity 对象，其中包含 LayData 对象
        return ResponseEntity.ok(response);
    }


    @RequestMapping("/check-username")
    public ResponseEntity<LayData> checkUsername(@RequestBody User user) {
        System.out.println("用户名检测");
        System.out.println(user);

        LayData response = new LayData();
        List<User> data = null;
        try {
            if (userService.getUserByName(user) != null) {
                // 如果用户名已存在，设置响应信息
                System.out.println("用户名已存在");
                response.setCode(1); // 通常 1 表示用户名已存在
                response.setMsg("用户名已存在");
                data = new ArrayList<>();
                data.add(userService.getUserByName(user));
                response.setData(data);
            } else {
                // 如果用户名不存在，设置响应信息
                response.setCode(0); // 通常 0 表示用户名可用
                response.setMsg("用户名可用");
            }
        } catch (Exception e) {
            // 处理异常情况
            response.setCode(1);
            response.setMsg("检测过程中发生错误：" + e.getMessage());
        }
        System.out.println("返回的response为" + response);
        return ResponseEntity.ok(response);
    }




    @RequestMapping("/check-login")
    @ResponseBody
    public Map<String, Object> checkLogin(HttpSession session) {
        Map<String, Object> response = new HashMap<>();
        User user=new User();
        if(session.getAttribute(SYS.UPLOAD_USER)!=null){
            user = (User) session.getAttribute(SYS.UPLOAD_USER);
            response.put("isLoggedIn", true);
            response.put("userId", user.getId()); // 返回用户 ID
            System.out.println(response.toString());
        }else{
            response.put("isLoggedIn", false);
        }


        return response;
    }


}





